﻿using NAudio.Vorbis;
using NAudio.Wave;
using static InteractiveMusicPlayerMobile.文件浏览器;

namespace InteractiveMusicPlayerMobile.辅助类
{
    public static class 音频解析
    {
        public static (List<IWaveProvider> 读取器, List<VorbisWaveReader> 文件流) 解析Ogg文件(List<string> 文件绝对路径集, 文件与文件夹 音频信息)
        {
            音频信息.内存音频文件 = new List<MemoryStream>();
            int 文件数 = 0; Console.WriteLine("正在准备将文件读入内存");

            //载入所有音频信息
            文件绝对路径集.ForEach(x =>
            {
                var 内存文件 = new MemoryStream();
                Console.WriteLine($"正在将文件{x}放置入内存，当前{文件数}个/共{文件绝对路径集.Count}个"); 文件数++;
                var 文件流 = File.OpenRead(x);

                Console.WriteLine($"开始复制第{文件数}个文件");

                文件流.CopyTo(内存文件);
                Console.WriteLine($"向内存添加第{文件数}个文件...");
                音频信息.内存音频文件.Add(内存文件);
            });

            文件数 = 0;
            var 读取器组 = new List<IWaveProvider>();
            var 文件流组 = new List<VorbisWaveReader>();
            foreach (var 音频文件 in 音频信息.内存音频文件)
            {
                Console.WriteLine($"正在将文件转换为流，当前{文件数}个/共{音频信息.内存音频文件.Count}个"); 文件数++;
                NAudio.Vorbis.VorbisWaveReader 文件流 = new(音频文件);
                var 读取器 = 文件流.ToWaveProvider16();

                文件流组.Add(文件流);
                读取器组.Add(读取器);
            }

            return (读取器组, 文件流组);
        }
        public static (IWaveProvider 读取器, VorbisWaveReader 文件流) 解析Ogg文件(string 文件绝对路径集)
        {
            NAudio.Vorbis.VorbisWaveReader 文件流 = new(文件绝对路径集);
            var 读取器 = 文件流.ToWaveProvider16();
            return (读取器, 文件流);
        }
    }
}
